package com.gdth.widget.scrollview;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;

public class LoadImageTask extends AsyncTask<String, Void, String> {  
	
	/** 
     * everyone 
     */  
    private int imageKey = -1;
    
    /** 
     * everyone column width 
     */  
    private int imageWidth = -1;

    /** 
     * constructor
     */  
    public LoadImageTask(int imageWidth) {
    	this.imageWidth = imageWidth;
    } 
    
    /** 
     * constructor
     * @param imageView 
     */  
    public LoadImageTask(int imageKey, int imageWidth) {  
        this.imageKey = imageKey;
        this.imageWidth = imageWidth;
    }

    @Override  
    protected String doInBackground(String... params) {
        return loadImage(params[0]); 
    }  

    @Override  
    protected void onPostExecute(String imageUrl) {  
        if (imageUrl != null) {
            
            Message msg = new Message();
            msg.what = 2;
            Bundle mBundle = new Bundle();
            mBundle.putString("url", imageUrl);
            mBundle.putInt("key", imageKey);
            msg.setData(mBundle);
        }
    }  

    /** 
     * 根据传入的URL，对图片进行加载。如果这张图片已经存在于SD卡中，则直接从SD卡里读取，否则就从网络上下载。 
     * @param imageUrl 图片的URL地址 
     * @return 加载到内存的图片。 
     */  
    private String loadImage(String imageUrl) {  
    	Bitmap imageBitmap = ImageLoader.getInstance().getBitmapFromMemoryCache(imageUrl);  
        if (imageBitmap == null) {
	        File imageFile = new File(getImagePath(imageUrl));  
	        if (!imageFile.exists()) {
	            downloadImage(imageUrl);  
	        }
	        if (imageUrl != null) {  
	        	imageBitmap = ImageLoader.decodeSampledBitmapFromResource(imageFile.getPath(), imageWidth);  
	            if (imageBitmap != null) {  
	            	ImageLoader.getInstance().addBitmapToMemoryCache(imageUrl, imageBitmap);   
	            }  
	        }
        }
        return imageUrl;  
    } 

    /** 
     * 将图片下载到SD卡缓存起来。
     * @param imageUrl 图片的URL地址。 
     */  
    private void downloadImage(String imageUrl) {  
        HttpURLConnection con = null;  
        FileOutputStream fos = null;  
        BufferedOutputStream bos = null;  
        BufferedInputStream bis = null;  
        File imageFile = null;  
        try {  
            URL url = new URL(imageUrl);  
            con = (HttpURLConnection) url.openConnection();  
            con.setConnectTimeout(5 * 1000);  
            con.setReadTimeout(15 * 1000);  
            con.setDoInput(true);  
            con.setDoOutput(true);  
            bis = new BufferedInputStream(con.getInputStream());  
            imageFile = new File(getImagePath(imageUrl));  
            fos = new FileOutputStream(imageFile);  
            bos = new BufferedOutputStream(fos);  
            byte[] b = new byte[1024];  
            int length;  
            while ((length = bis.read(b)) != -1) {  
                bos.write(b, 0, length);  
                bos.flush();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (bis != null) {  
                    bis.close();  
                }  
                if (bos != null) {  
                    bos.close();  
                }  
                if (con != null) {  
                    con.disconnect();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        if (imageFile != null) {  
            Bitmap bitmap = ImageLoader.decodeSampledBitmapFromResource(imageFile.getPath(), imageWidth);  
            if (bitmap != null) {  
                ImageLoader.getInstance().addBitmapToMemoryCache(imageUrl, bitmap);  
            }  
        }  
    }  

    /** 
     * 获取图片的本地存储路径
     * @param imageUrl 图片的URL地址。 
     * @return 图片的本地存储路径。 
     */  
    private String getImagePath(String imageUrl) {  
        int lastSlashIndex = imageUrl.lastIndexOf("/");  
        String imageName = imageUrl.substring(lastSlashIndex + 1);  
        String imageDir = Environment.getExternalStorageDirectory().getPath() + "/PhotoWallFalls/";  
        File file = new File(imageDir);  
        if (!file.exists()) {  
            file.mkdirs();  
        }  
        String imagePath = imageDir + imageName;  
        return imagePath;  
    }
}
